package game;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 *
 * @author Tim
 */
public class GemischterStapel {

    private String[] farben = {"magenta", "orange", "blau", "braun", "gelb", "grau", "gruen"};
    private List<Farbkarte> GemischterStapel = new ArrayList<Farbkarte>();

    //Konstruktor
    public GemischterStapel() {

        //Mit dieser verschachtelten For-Schleife werden alle Farbkarten für das Spiel erstellt
        // erste for-schleife wird 7 mal durchlaufen (weil 7 farben)
        // zweite for-schleife wird 9 mal durchlaufen (9 karten pro farbe)
        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 9; j++) {

                Farbkarte fk = new Farbkarte(farben[i]);

                GemischterStapel.add(fk);
            }
        }

        //Die ArrayList GemischterStapel wird gemischt...        
        Collections.shuffle(GemischterStapel);
    }

    /**
     * Die oberste Karte vom Stapel wird zurückgegeben. (Die Einträge im Array
     * rutschen an Index 0 nach)
     *
     * @return Oberste Karte.
     */
    public Farbkarte karteAufnehmen() {
        return GemischterStapel.get(0);
    }

    /**
     * Die Farbe von der obersten Karte wird zurückgegeben. Wird genützt um die
     * Karte auf dem GUI anzuzeigen, bevor sie effektiv vom Stapel genommen
     * wird, um auf ein GameField Kartendeck zu verlegen.
     *
     * @return Farbe der obersten Karte des Stapels.
     */
    public String getFarbeVonAufgenommenerKarte() {
        return GemischterStapel.get(0).getFarbe();
    }

    /**
     * Die oberste Karte vom Stapel wird zurückgegeben. (Die Einträge im Array
     * rutschen an Index 0 nach)
     *
     * @return Oberste Karte.
     */
    public void letzteKarteLöschen() {
        GemischterStapel.remove(0);
    }

    //Eine neue Startkarte soll gezogen werden
    //die Startkarte welche gezogen wurde aber die gleiche Farbe wie diejenige eines anderen Spielers hat wird übergeben
    //und an letzter Stelle des Stapels eingefügt
    //eine neue Karte wird vom Stapel aufgenommen und zurückgegeben.
    public Farbkarte neueKarte(Farbkarte AktuelleKarte) {
        int letzteKarte = GemischterStapel.size() - 1;
        Farbkarte Karte = GemischterStapel.get(0);
        GemischterStapel.add(letzteKarte, AktuelleKarte);
        return Karte;
    }

    public int stapelGroesse() {
        return GemischterStapel.size();
    }
}
